package middleware

import (
	"github.com/gin-contrib/cors"
	"github.com/gin-gonic/gin"
	"time"
)

// Cors 创建并返回一个 gin.HandlerFunc，用于配置跨域资源共享（CORS）策略。
// 该函数返回的处理函数将被应用于 Gin 框架的路由，以允许来自任何来源的跨域请求。
// 这对于开发 API 服务特别有用，因为它放宽了浏览器同源策略的限制。
func Cors() gin.HandlerFunc {
	// 新建 CORS 配置，配置项说明如下：
	return cors.New(cors.Config{
		// 定义一个函数，它总是返回 true，这意味着允许任何来源的请求。
		// 这是不安全的，应在生产环境中根据实际需求进行限制。
		AllowOriginFunc: func(origin string) bool {
			return true
		},
		// 允许使用 GET、POST、PUT、PATCH、DELETE 和 OPTIONS 方法进行跨域请求。
		AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"},
		// 允许请求头中包含 Content-Type、Authorization 和 Origin。
		AllowHeaders: []string{"Content-Type", "Authorization", "Origin"},
		// 允许响应头中包含 Content-Length。
		ExposeHeaders: []string{"Content-Length"},
		// 允许浏览器对响应进行预取（OPTIONS 请求），并设置预取的有效期为 12 小时。
		AllowCredentials: true,
		MaxAge:           12 * time.Hour,
	})
}
